perm filename PTCH2[AI,JMC] blob
sn#005452 filedate 1971-08-13 generic text, type T, neo UTF8
00050 TITLE PUTCH
00100 PUTCH: SKIPN OLD,POSTB(DEST)
00101 MOVE OLD,OFBTB(MOVER)
00102 MOVEM OLD,@PCTB(MOVER)
00104 SKIPGE OLD,LOC(MOVER)
00110 JRST L11A
00111 SETZM DEF(MOVER)
00112 SETZM ATT(MOVER)
00113 MOVE K,KIND(MOVER)
00120 MOVNI T2,1
00130 SKIPL I,LM(MOVER)
00140 JRST L11P
00150 HLRE M,I
00155 JRST PL4
00160 L11P: TLC I,-1
00170 SKIPGE T1,MOVE(I)
00180 JRST L11PA
00190 MOVEM T2,MOVE(I)
00200 MOVEM T2,JBEAR(T1)
00201 CAIN K,PAWN
00202 TRNN I,2
00203 SKIPA
00204 JRST L11PA
00205 ANDI T1,77
00206 SKIPGE T1,OCC(T1)
00207 JRST L11PA
00208 MOVE B,MOVER
00209 XOR B,T1
00210 TRNE B,20
00211 SOSA ATT(T1)
00212 SOS DEF(T1)
00213 L11PA: AOBJN I,L11P+1
00215 JRST L11A
00220 PL2: ADDI I,10
00230 ANDI I,-10
00240 PL4: SKIPGE T1,MOVE(I)
00250 JRST PL3
00260 PL1: MOVEM T2,JBEAR(T1)
00270 MOVEM T2,MOVE(I)
00271 CAIN K,KING
00272 TRNN I,7
00273 SKIPA
00274 JRST PL3F
00275 ANDI T1,77
00276 SKIPGE T1,OCC(T1)
00277 JRST PL3F
00278 MOVE B,MOVER
00279 XOR B,T1
00280 TRNE B,20
00281 SOSA ATT(T1)
00282 SOS DEF(T1)
00283 PL3F: SKIPL T1,MOVE+1(I)
00290 AOJA I,PL1
00300 PL3: AOJL M,PL2
00900 L11A: MOVEM DEST,LOC(MOVER)
01000 SETOM OCC(OLD)
01100 SKIPL DEST
01200 MOVEM MOVER,OCC(DEST)
01300 JUMPGE OLD,L21
01400 MOVE T1,KIND(MOVER)
01500 MOVE T1,VALUE(T1)
01600 CAIGE MOVER,20
01700 ADDM T1,WCOUNT#
01800 CAIL MOVER,20
01900 ADDM T1,BCOUNT#
02000 JRST P1
02100 L21: MOVEI MDIR,0
02200 HRLZI DIR,-10
02300 MOVE IBEAR,OLD
02400 L24: SKIPGE B,JBEAR(IBEAR)
02500 JRST PD1
02600 MOVE K,KIND(B)
02700 CAIN K,PAWN
02800 JRST PD2
02900 SKIPGE N,NEXT(IBEAR)
03000 JRST PD1
03100 MOVE T1,LOC(B)
03200 LDB M,DISTBL(OLD)
03300 ADD M,EIGHTX(DIR)
03400 ADD M,LM(B)
04500 PD3: MOVEI T1,@N
04700 MOVEM B,JBEAR(T1)
05000 HRRZM T1,MOVE(M)
05100 CAIE K,KING
05200 JRST L25
00100 MOVE T2,OPP(DIR)
00200 MOVE I,N
00300 CAIL B,20
00400 IORI I,100
00500 MOVEM T2,KDIR(I)
00600 L25: SKIPL T2,OCC(N)
00700 JRST PD4
00800 SKIPGE N,NEXT(T1)
00900 JRST PD1
01000 AOJA M,PD3
01100 PD2: MOVE T1,RANK(OLD)
01200 CAIGE B,20
01300 JRST L31
01400 CAIN T1,5
01450 CAIE MDIR,300
01500 JRST PD1
01600 JRST L32
01610 PD4: CAIN K,KING
01620 JRST PD1
01630 XOR B,T2
01640 TRNN B,20
01650 AOSA DEF(T2)
01660 AOS ATT(T2)
01670 JRST PD1
01700 L31: CAIN T1,2
01750 CAIE MDIR,100
01800 JRST PD1
01900 L32: MOVE T1,IBEAR
02000 CAIGE B,20
02100 ADDI T1,10
02200 CAIL B,20
02300 SUBI T1,10
02400 MOVEM B,JBEAR(T1)
02500 MOVE T2,LM(B)
02700 HRRZM T1,MOVE+3(T2)
02800 PD1: ADDI MDIR,100
02900 ADDI IBEAR,100
03000 AOBJN DIR,L24
03100 JUMPGE DEST,P1
03200 MOVE T1,KIND(MOVER)
03300 MOVN T1,VALUE(T1)
03400 CAIGE MOVER,20
03500 ADDM T1,WCOUNT
03600 CAIL MOVER,20
03700 ADDM T1,BCOUNT
04000 POPJ P,
04100 P1: MOVEI MDIR,0
04200 HRLZI DIR,-10
04300 MOVE IBEAR,DEST
04400 L44: SKIPGE B,JBEAR(IBEAR)
04500 JRST PE1
04600 MOVE K,KIND(B)
04700 CAIN K,PAWN
04800 JRST PE2
04900 SKIPGE N,NEXT(IBEAR)
05000 JRST PE1
00100 MOVE T1,LOC(B)
00200 LDB M,DISTBL(DEST)
00300 ADD M,EIGHTX(DIR)
00400 ADD M,LM(B)
01500 PE3: MOVEI T1,@N
01700 SETOM JBEAR(T1)
01800 SETOM MOVE(M)
01900 CAIE K,KING
02000 JRST L45
02100 MOVE T2,N
02200 CAIL B,20
02300 IORI T2,100
02400 SETOM KDIR(T2)
02500 L45: SKIPL T2,OCC(N)
02600 JRST PE4
02700 SKIPGE N,NEXT(T1)
02750 JRST PE1
02800 AOJA M,PE3
02900 PE2: MOVE T1,RANK(DEST)
03000 CAIGE B,20
03100 JRST L51
03200 CAIN T1,5
03250 CAIE MDIR,300
03300 JRST PE1
03400 JRST L52
03410 PE4: CAIN K,KING
03420 JRST PE1
03430 XOR B,T2
03440 TRNN B,20
03450 SOSA DEF(T2)
03460 SOS ATT(T2)
03470 JRST PE1
03500 L51: CAIN T1,2
03550 CAIE MDIR,100
03600 JRST PE1
03700 L52: MOVE T1,IBEAR
03800 CAIGE B,20
03900 ADDI T1,10
04000 CAIL B,20
04100 SUBI T1,10
04200 SETOM JBEAR(T1)
04300 MOVE T2,LM(B)
04500 SETOM MOVE+3(T2)
04600 PE1: ADDI MDIR,100
04700 ADDI IBEAR,100
04800 AOBJN DIR,L44
00100 MOVE K,KIND(MOVER)
00200 XCT TB1(K)
00400 PFRB5: HRRZ MDIR,DIR
00500 LSH MDIR,6
00600 PFRB4: HRRZ M,DIR
00700 LSH M,3
00800 ADD M,LM(MOVER)
00900 MOVE N,DEST
00950 HRLI N,MDIR
01000 MOVE T1,MDIR
01100 IOR T1,N
01200 PFRB3: SKIPGE N,NEXT(T1)
01300 JRST PF1
01375 MOVEI T1,@N
01400 MOVEM MOVER,JBEAR(T1)
01500 HRRZM T1,MOVE(M)
01600 CAIE K,KING
01700 JRST PFRB2
01800 MOVE I,N
01900 CAIL MOVER,20
02000 IORI I,100
02100 MOVE T2,OPP(DIR)
02200 MOVEM T2,KDIR(I)
02300 PFRB2: SKIPGE T2,OCC(N)
02400 AOJA M,PFRB3
02410 CAIN K,KING
02420 TRNN M,7
02430 SKIPA
02440 JRST PF1
02450 MOVE IBEAR,MOVER
02460 XOR IBEAR,T2
02470 TRNN IBEAR,20
02480 AOSA DEF(T2)
02490 AOS ATT(T2)
02500 PF1: ADDI MDIR,100
02600 AOBJN DIR,PFRB4
02700 JRST UPAT
02800 TB1: JRST PFP
02900 HRLZI DIR,-4
03000 JRST PFN
03100 MOVE DIR,[XWD -4,4]
03200 HRLZI DIR,-10
03300 JRST KSET
03310 KSET: CAIGE MOVER,20
03320 JRST KS1
03330 MOVE DIR,[XWD KDIR+100,KDIR+101]
03340 SETOM KDIR+100
03350 BLT DIR,KDIR+177
03360 HRLZI DIR,-10
03370 JRST PFRB5
03380 KS1: MOVE DIR,[XWD KDIR,KDIR+1]
03382 SETOM KDIR
03384 BLT DIR,KDIR+77
03386 HRLZI DIR,-10
03388 JRST PFRB5
03400 PFN: MOVE DIR,[XWD -10,10]
03500 MOVE MDIR,DEST
03600 IORI MDIR,1000
03700 PFN2: SKIPGE N,NEXT(MDIR)
03800 JRST PFN1
03900 MOVE T1,DIR
04000 LSH T1,6
04100 IOR T1,N
04200 MOVEM MOVER,JBEAR(T1)
04300 MOVEI T2,-10(DIR)
04400 ADD T2,LM(MOVER)
04500 HRRZM T1,MOVE(T2)
04510 SKIPGE T2,OCC(N)
04520 JRST PFN1
04530 MOVE T1,MOVER
04540 XOR T1,T2
04550 TRNN T1,20
04560 AOSA DEF(T2)
04570 AOS ATT(T2)
04600 PFN1: ADDI MDIR,100
04700 AOBJN DIR,PFN2
04800 JRST UPAT
00100 PFP: MOVE M,LM(MOVER)
00200 CAIL MOVER,20
00300 JRST BLACKP
00400 MOVEI DIR,400
00500 IOR DIR,DEST
00600 SKIPGE N,NEXT(DIR)
00700 JRST PF3
00710 SKIPGE T1,OCC(N)
00720 JRST PF31
00730 CAIGE T1,20
00740 AOSA DEF(T1)
00750 AOS ATT(T1)
00800 PF31: IORI N,400
00900 MOVEM MOVER,JBEAR(N)
01000 HRRZM N,MOVE(M)
01100 PF3: SKIPGE N,NEXT+100(DIR)
01200 JRST PF3P
01210 SKIPGE T1,OCC(N)
01220 JRST PF32
01230 CAIGE T1,20
01240 AOSA DEF(T1)
01250 AOS ATT(T1)
01300 PF32: IORI N,500
01400 MOVEM MOVER,JBEAR(N)
01500 HRRZM N,MOVE+1(M)
01600 PF3P: MOVE IBEAR,DEST
01700 ADDI IBEAR,110
01800 MOVEM MOVER,JBEAR(IBEAR)
01900 HRRZM IBEAR,MOVE+2(M)
02000 MOVE T1,RANK(DEST)
02100 CAIN T1,1
02200 SKIPL OCC+10(DEST)
02300 JRST UPAT
02400 ADDI IBEAR,10
02500 MOVEM MOVER,JBEAR(IBEAR)
02600 HRRZM IBEAR,MOVE+3(M)
02700 JRST UPAT
02800 BLACKP: MOVEI DIR,600
02900 IOR DIR,DEST
03000 SKIPGE N,NEXT(DIR)
03100 JRST PF4
03110 SKIPGE T1,OCC(N)
03120 JRST PF41
03130 CAIGE T1,20
03140 AOSA ATT(T1)
03150 AOS DEF(T1)
03200 PF41: IORI N,600
03300 MOVEM MOVER,JBEAR(N)
03400 HRRZM N,MOVE(M)
03500 PF4: SKIPGE N,NEXT+100(DIR)
03600 JRST PF4P
03610 SKIPGE T1,OCC(N)
03620 JRST PF42
03630 CAIGE T1,20
03640 AOSA ATT(T1)
03650 AOS DEF(T1)
03700 PF42: IORI N,700
03800 MOVEM MOVER,JBEAR(N)
03900 HRRZM N,MOVE+1(M)
04000 PF4P: MOVE IBEAR,DEST
04100 ADDI IBEAR,270
04200 MOVEM MOVER,JBEAR(IBEAR)
04300 HRRZM IBEAR,MOVE+2(M)
04400 MOVE T1,RANK(DEST)
04500 CAIN T1,6
04600 SKIPL OCC-10(DEST)
04700 JRST UPAT
04800 SUBI IBEAR,10
04900 MOVEM MOVER,JBEAR(IBEAR)
05000 HRRZM IBEAR,MOVE+3(M)
05100 JRST UPAT
00100 NXTSET: MOVEI I,0
00150 HRLZI N,-20
00200 NXS3: HLRE T1,TBST(N)
00250 HRRE T2,TBST(N)
00300 HRLZI K,-10
00350 NXS2: HRLZI B,-10
00400 NXS1: HRRZ 0,B
00450 ADD 0,T2
00500 JUMPL 0,NG
00550 CAILE 0,7
00600 JRST NG
00650 HRRZ DIR,K
00700 ADD DIR,T1
00750 JUMPL DIR,NG
00800 CAILE DIR,7
00850 JRST NG
00900 LSH DIR,3
00950 IOR DIR
01000 HRLI MDIR
01050 MOVEM 0,NEXT(I)
01100 NXS4: ADDI I,1
01150 AOBJN B,NXS1
01200 AOBJN K,NXS2
01250 AOBJN N,NXS3
01300 POPJ P,
01350 NG: SETOM NEXT(I)
01400 JRST NXS4
01450 TBST: BYTE (18) 0,-1,1,0,0,1,-1,0,1,-1,1,1,-1,1,-1,-1
01500 BYTE (18) 2,-1,2,1,1,2,-1,2,-2,1,-2,-1,-1,-2,1,-2
01550 NEXT: BLOCK 2000
01560 DEF: BLOCK 40
01570 ATT: BLOCK 40
01600 LOC: BLOCK 41
01650 OCC: BLOCK 100
01700 JBEAR: BLOCK 2000
01750 KDIR: BLOCK 200
01800 MOVE: BLOCK 4000
01850 KIND: REPEAT 2,<EXP 1,2,3,4,5,3,2,1
01900 REPEAT 10,<Z>>
01950 VALUE: EXP 1,5,3,3,11,1000
02000 RANK: FOO=0
02050 REPEAT 10,<REPEAT 10,<EXP FOO>
02100 FOO=FOO+1>
02150 FILE: REPEAT 10,<EXP 0,1,2,3,4,5,6,7>
02200 OPP: EXP 2,3,0,1,6,7,4,5,14,15,16,17,10,11,12,13
02250 LM: FOO=0
02260 REPEAT 2,<XWD -10,FOO
02262 FOO=FOO+100
02264 XWD 7,FOO
02266 FOO=FOO+100
02268 REPEAT 4,<XWD -10,FOO
02270 FOO=FOO+100>
02272 XWD 7,FOO
02274 FOO=FOO+100
02276 XWD -10,FOO
02278 FOO=FOO+100
02280 REPEAT 10,<XWD 3,FOO
02290 FOO=FOO+100>
02300 >
00100 P=17
00200 MOVER=16
00300 DEST=15
00400 I=14
00500 OLD=13
00600 MDIR=12
00700 DIR=11
00800 IBEAR=10
00900 B=7
01000 K=6
01100 M=5
01200 N=4
01300 T2=3
01400 T1=2
01500 PAWN=0
01600 ROOK=1
01700 KNIGHT=2
01800 BISHOP=3
01900 QUEEN=4
02000 KING=5
02100 EIGHTX: EXP 0,10,20,30,40,50,60,70,100,110,120,130,140,150,160,170,200
02200 DISTBL: FOO=0
02300 REPEAT 5,<X=2
02400 REPEAT 14,<POINT 3,BTB+FOO(T1),X
02500 X=X+3>
02600 FOO=FOO+100>
02700 X=2
02800 REPEAT 4,<POINT 3,BTB+500(T1),X
02900 X=X+3>
03000 BTB: BLOCK 600
03100 SETBTB: MOVEI T1,77
03200 MOVEI T2,77
03300 MOVE 1,RANK(T1)
03400 CAMN 1,RANK(T2)
03500 JRST L22
03600 SUB 1,RANK(T2)
03700 JRST L23
03800 L22: MOVE 1,FILE(T1)
03900 SUB 1,FILE(T2)
04000 L23: MOVMS 1
04100 DPB 1,DISTBL(T2)
04200 SOJGE T2,SETBTB+2
04300 SOJGE T1,SETBTB+1
04400 POPJ P,
00100 UPAT: HRLZI MDIR,-20
00200 HRR MDIR,DEST
00300 UP2: SKIPGE T2,JBEAR(MDIR)
00400 JRST UP1
00500 MOVE K,KIND(T2)
00600 CAIN K,PAWN
00700 JRST PATK
00800 CAIN K,KING
00900 JRST KATK
01000 UPDT: XOR T2,MOVER
01100 TRNE T2,20
01200 AOSA ATT(MOVER)
01300 AOS DEF(MOVER)
01400 JRST UP1
01500 PATK: MOVE T1,LOC(T2)
01600 MOVE T1,FILE(T1)
01700 CAME T1,FILE(DEST)
01800 JRST UPDT
01900 JRST UP1
02000 KATK: MOVE T1,LOC(T2)
02100 LDB M,DISTBL(DEST)
02200 CAIN M,1
02300 JRST UPDT
02400 UP1: ADDI MDIR,77
02500 AOBJN MDIR,UP2
02600 POPJ P,